<?php

namespace Fize\Third\WechatWork\Qyapi;

use CURLFile;
use Fize\Third\WechatWork\QyapiAbstract;

/**
 * 素材管理
 */
class Media extends QyapiAbstract
{

    /**
     * 上传临时素材
     * @param string $file 要上传的文件路径
     * @param string $type 媒体文件类型，分别有图片（image）、语音（voice）、视频（video），普通文件（file）
     * @return array
     */
    public function upload(string $file, string $type): array
    {
        $params = [
            'media' => new CURLFile($file)
        ];
        return $this->httpPost("/media/upload?access_token={$this->accessToken}&type={$type}", $params, false);
    }

    /**
     * 上传图片
     * @param string $file 要上传的图片文件路径
     * @return array
     */
    public function uploadimg(string $file): array
    {
        $params = [
            'media' => new CURLFile($file)
        ];
        return $this->httpPost("/media/uploadimg?access_token={$this->accessToken}", $params, false);
    }

    /**
     * 获取临时素材
     * @param string $media_id 媒体文件ID
     * @return array ['type' => *, 'value' => *]
     */
    public function get(string $media_id): array
    {
        return $this->httpGet("/media/get?access_token={$this->accessToken}&media_id={$media_id}", true, true, true);
    }

    /**
     * 获取从JSSDK的uploadVoice接口上传的临时语音素材
     * @param string $media_id
     * @return array
     */
    public function getJssdk(string $media_id): array
    {
        return $this->httpGet("/media/get/jssdk?access_token={$this->accessToken}&media_id={$media_id}", true, true, true);
    }

    /**
     * 生成异步上传任务
     * @param int    $scene    场景值
     * @param string $type     媒体文件类型
     * @param string $filename 文件名
     * @param string $url      文件cdn url。url要求支持Range分块下载。
     * @param string $md5      文件md5。对比从url下载下来的文件md5是否一致。
     * @return array
     */
    public function uploadByUrl(int $scene, string $type, string $filename, string $url, string $md5): array
    {
        $params = [
            'scene'    => $scene,
            "type"     => $type,
            "filename" => $filename,
            "url"      => $url,
            "md5"      => $md5
        ];
        return $this->httpPost("/media/upload_by_url?access_token={$this->accessToken}", $params);
    }

    /**
     * 查询异步任务结果
     * @param string $jobid 任务id
     * @return array
     */
    public function getUploadByUrlResult(string $jobid): array
    {
        $params = [
            'jobid' => $jobid,
        ];
        return $this->httpPost("/media/get_upload_by_url_result?access_token={$this->accessToken}", $params);
    }

}